package com.D5Power.net
{
	import flash.utils.ByteArray;
	
	public class D5ByteArray extends ByteArray
	{
		public function D5ByteArray()
		{
			super();
		}
		
		/**
		 * 设置由参数 index 指定位置处的位的值。如果 index 指定位置处的长度大于当前长度，该字节数组的长度将设置为最大值，右侧多出的位将用零填充。
		 * @param index 一个整数，指示位在 ByteArray 中的位置。第一个位由 0 指示，最后一个位由 BitArray.length * 8 - 1 指示。
		 * @param value 要设置的值。true 为 1 ，false 为 0 。
		 * 
		 */             
		public function writeBitAt(index:uint, value:Boolean):void
		{
			index++; // 索引值加 1 ，计算出长度
			
			// 如果 index 指定位置处的长度大于当前长度，该字节数组的长度将设置为最大值，右侧多出的位将用零填充。
			var len:uint = Math.ceil(index/8);
			if (len > this.length)
			{
				this.length = len;
			}
			
			var byteIndex:uint = Math.ceil(index/8) - 1;
			var flag:uint = 1 << (this.length * 8 - index) % 8; // 计算标志位
			if (value)
			{
				this[byteIndex] |= flag; // 设置位，即赋值 1
			}
			else
			{
				this[byteIndex] &= ~flag; // 取消位，即赋值 0
			}
		}
	}
}